﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using Telerik.Web.UI;
using SMA.GENTEv1;

public partial class Protegidos_Administracao_Cadastros_acWorkflow : System.Web.UI.Page
{
    private const int ItemsPerRequest = 10;
    protected const int idTipoPatrocinador = 1;
    protected const int idTipoPrestador = 2;

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            CarregaOrganizacao(rcbPatrocinador, idTipoPatrocinador);

            OcultaCampos(true);

            rcbPrestador.Enabled = false;
            rcbContrato.Enabled = false;
            rcbProcesso.Enabled = false;
        }
    }

    #region Eventos
    protected void btnPesquisar_Click(object sender, EventArgs e)
    {
        Pesquisa(0);
        GridLocalidade.DataBind();
        GridEmpresa.DataBind();
        RadGrid1.DataBind();
        OcultaCampos(false);
    }
    protected void btnLimpar_Click(object sender, EventArgs e)
    {

    }
    protected void GridLocalidade_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Pesquisa(1);
    }
    protected void GridLocalidade_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            string link = string.Empty;
            int idProcessoContrato = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdProcessoContrato"].ToString());

            ProcessoContrato processo = new ProcessoContrato(idProcessoContrato);

            if (processo.TipoProcesso.Url != "ProcessoPadrao.aspx")
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString();
            else
            {
                TipoProcesso tipoProcesso = new TipoProcesso(processo.TipoProcesso.IdTipoProcesso, true);
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString() + "&idTipoDocumento=" + tipoProcesso.TipoDocumento[0].IdTipoDocumento.ToString();
            }

            Server.Transfer(link);
        }
    }
    protected void GridLocalidade_DetailTableDataBind(object source, GridDetailTableDataBindEventArgs e)
    {
        GridDataItem dataItem = (GridDataItem)e.DetailTableView.ParentItem;
        switch (e.DetailTableView.Name)
        {
            case "TableViewProcLocalidades":
                int idprocessocontrato = int.Parse(dataItem.GetDataKeyValue("IdProcessoContrato").ToString());
                ProcessoContrato processoContrato = new ProcessoContrato();
                e.DetailTableView.DataSource = processoContrato.BuscarCidadeProcesso(idprocessocontrato);
                break;
        }
    }

    protected void GridEmpresa_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Pesquisa(2);
    }
    protected void GridEmpresa_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            string link = string.Empty;
            int idProcessoContrato = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdProcessoContrato"].ToString());

            ProcessoContrato processo = new ProcessoContrato(idProcessoContrato);

            if (processo.TipoProcesso.Url != "ProcessoPadrao.aspx")
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString();
            else
            {
                TipoProcesso tipoProcesso = new TipoProcesso(processo.TipoProcesso.IdTipoProcesso, true);
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString() + "&idTipoDocumento=" + tipoProcesso.TipoDocumento[0].IdTipoDocumento.ToString();
            }

            Server.Transfer(link);
        }
    }
    protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
    {
        Pesquisa(3);
    }
    protected void RadGrid1_ItemCommand(object source, Telerik.Web.UI.GridCommandEventArgs e)
    {
        if (e.CommandName == "Select")
        {
            string link = string.Empty;
            int idProcessoContrato = Int32.Parse(e.Item.OwnerTableView.DataKeyValues[e.Item.ItemIndex]["IdProcessoContrato"].ToString());

            ProcessoContrato processo = new ProcessoContrato(idProcessoContrato);

            if (processo.TipoProcesso.Url != "ProcessoPadrao.aspx")
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString();
            else
            {
                TipoProcesso tipoProcesso = new TipoProcesso(processo.TipoProcesso.IdTipoProcesso, true);
                link = "_wf/wf" + processo.TipoProcesso.Url + "?idProcessoContrato=" + idProcessoContrato.ToString() + "&idContrato=" + rcbContrato.SelectedValue.ToString() + "&idTipoDocumento=" + tipoProcesso.TipoDocumento[0].IdTipoDocumento.ToString();
            }

            Server.Transfer(link);
        }
    }
    protected void rcbPatrocinador_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        CarregaPrestadores(rcbPrestador, Int32.Parse(rcbPatrocinador.SelectedValue.ToString()));
        rcbPrestador.Enabled = true;
    }
    protected void rcbPrestador_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        CarregaContrato(rcbContrato, int.Parse(rcbPatrocinador.SelectedValue), int.Parse(rcbPrestador.SelectedValue));
        rcbContrato.Enabled = true;
    }
    protected void rcbContrato_SelectedIndexChanged(object o, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        rcbProcesso.Enabled = true;
    }
    protected void rcbProcesso_ItemsRequested(object o, RadComboBoxItemsRequestedEventArgs e)
    {
        int idContrato = int.Parse(rcbContrato.SelectedValue);

        ProcessoContrato processo = new ProcessoContrato();
        List<ProcessoContrato> listProcesso = processo.SelectPor(idContrato, e.Text);

        int itemOffset = e.NumberOfItems;
        int endOffset = Math.Min(itemOffset + ItemsPerRequest, listProcesso.Count);
        e.EndOfItems = endOffset == listProcesso.Count;

        for (int i = itemOffset; i < endOffset; i++)
        {
            rcbProcesso.Items.Add(new RadComboBoxItem(listProcesso[i].TipoProcesso.Descricao, listProcesso[i].IdProcessoContrato.ToString()));
        }

        e.Message = GetStatusMessage(endOffset, listProcesso.Count);
 
    }
    #endregion

    #region Metodos
    protected List<ProcessoContrato> CarregaProcessos(string nome, int idContrato, int idProcessoAba)
    {
        ProcessoContrato processo = new ProcessoContrato();
        List<ProcessoContrato> listProcesso = processo.SelectPor(idContrato, nome, idProcessoAba);

        return listProcesso;
    }
    private void Pesquisa(int idProcessoAba)
    {
        switch (idProcessoAba)
        {
            case 0:
                GridLocalidade.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), 1);
                GridEmpresa.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), 2);
                RadGrid1.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), 3);
                break;
            case 1:
                GridLocalidade.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), idProcessoAba);
                break;
            case 2:
                GridEmpresa.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), idProcessoAba);
                break;
            case 3:
                RadGrid1.DataSource = CarregaProcessos(rcbProcesso.Text, int.Parse(rcbContrato.SelectedValue), idProcessoAba);
                break;
        }
    }
    protected void CarregaOrganizacao(RadComboBox combo, int idTipoOrgan)
    {
        try
        {
            Organizacao organizacao = new Organizacao();
            List<Organizacao> listOrgan = organizacao.SelectPor(idTipoOrgan);

            combo.DataTextField = "NomeFantasia";
            combo.DataValueField = "IdOrganizacao";
            combo.DataSource = listOrgan;
            combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    protected void CarregaPrestadores(RadComboBox combo, int idPatrocinador)
    {
        try
        {
            Organizacao organizacao = new Organizacao(idPatrocinador, false, true);
            List<Organizacao> listPrestadores = new List<Organizacao>();

            foreach (OrganizacaoPatrocinadorPrestador item in organizacao.OrganizacaoPrestador)
            {
                listPrestadores.Add(item.OrganizacaoPrestador);
            }

            combo.Text = "";
            combo.DataTextField = "NomeFantasia";
            combo.DataValueField = "IdOrganizacao";
            combo.DataSource = listPrestadores;
            combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    protected void CarregaContrato(RadComboBox combo, int idPatrocinador, int idPrestador)
    {
        try
        {
            Contrato contrato = new Contrato();
            List<Contrato> listContrato = contrato.SelectContratoVigencia(idPatrocinador, idPrestador);

            combo.DataTextField = "Descricao";
            combo.DataValueField = "IdContrato";
            combo.DataSource = listContrato;
            combo.DataBind();
        }
        catch (Exception ex)
        {
            throw ex;
        }
    }
    private static string GetStatusMessage(int offset, int total)
    {
        if (total <= 0)
            return "No matches";

        return String.Format("Items <b>1</b>-<b>{0}</b> de <b>{1}</b>", offset, total);
    }
    protected void OcultaCampos(bool oculta)
    {
        trResultado.Visible = !oculta;
    }
    #endregion

    
}
